
// 导航守卫 路由守卫
import router from '@/router' // 引入路由实例
import store from '@/store' // 引入vuex store实例
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式

const whiteList  = ['/login', '/404'] // 定义白名单  所有不受权限控制的页面
// 前置导航
router.beforeEach(async (to, from, next) => {
	NProgress.start() // 开启进度条
	// 第一步先判断是否登录，即判断是否有token
	if(store.getters.token){
		//已经登录，第二步判断要跳转的页面是否为登录页面
		if(to.path==='/login'){	
			next('/') //是跳转到登录页，则直接拦截到主页
		}else{	
			// next() // 不是登录页， 则直接放行
			// 这里要增加 获取用户资料的请求，先判断是否有用户资料
			if(store.getters.userId){
				next() // 有用户资料，放行
			}else{
			await	store.dispatch('user/getUserInfoAction')	// 没有用户资料，则要调用方法，获取用户资料
			next() // 获取到用户资料之后再放行
			}
		}
	}else{
		//未登录，第二步判断要跳转的页面是否在白名单中
		if(whiteList.includes(to.path)){		
			next() // 在白名单中，放行
		}else{
			next('/login') // 不在白名单中为非法访问，拦截到登录页面
		}
	}
	NProgress.done() // 手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题
})

// 后置导航
router.afterEach(()=>{
	NProgress.done() // 关闭进度条
})